var express = require('express');
var router = express.Router();

//引入Query方法，执行sql语句 
const Query = require('../utils/db.js')
//使用公共数据
let { api_url } = require('../utils/config.js')


/* GET home page. */
router.get('/', function (req, res, next) {
    res.send('列表')
});



//列表页分类  地区
router.get('/areas', async (req, res, next) => {
    //1. 书写sql并执行
    let sql = `SELECT id,area_name,area_code FROM e_area`
    let { err, result } = await Query(sql)
    if (err) {
        next({
            msg: '稍后再试',
            status: 500
        })
        return
    }
    //2. 根据业务拼装数据
    let data = {
        msg: "OK",
        status: 200,
        result
    }
    //3. 返回json数据
    res.send(data)
});

//<------------------------------------------------------------------------------->

//列表页分类  年级
router.get('/grades', async (req, res, next) => {
    //1. 书写sql并执行
    let sql = `SELECT * FROM e_grade`
    let { err, result } = await Query(sql)
    if (err) {
        next({
            msg: '稍后再试',
            status: 500
        })
        return
    }
    //2. 根据业务拼装数据
    let data = {
        msg: "OK",
        status: 200,
        result
    }
    //3. 返回json数据
    res.send(data)
});

//<------------------------------------------------------------------------------->

//列表页分类  学科
router.get('/subjects', async (req, res, next) => {
    //1. 书写sql并执行
    let sql = `SELECT * FROM e_subject`
    let { err, result } = await Query(sql)
    if (err) {
        next({
            msg: '稍后再试',
            status: 500
        })
        return
    }
    //2. 根据业务拼装数据
    let data = {
        msg: "OK",
        status: 200,
        result
    }
    //3. 返回json数据
    res.send(data)
});

//<------------------------------------------------------------------------------->

//列表页分类  考试类别
router.get('/cates', async (req, res, next) => {
    //1. 书写sql并执行
    let sql = `SELECT * FROM e_category`
    let { err, result } = await Query(sql)
    if (err) {
        next({
            msg: '稍后再试',
            status: 500
        })
        return
    }
    //2. 根据业务拼装数据
    let data = {
        msg: "OK",
        status: 200,
        result
    }
    //3. 返回json数据
    res.send(data)
});


//<------------------------------------------------------------------------------->



//列表页分类 课程列表
router.get('/courses', async function (req, res, next) {

    // 0. 接收所有的参数
    let { page = 1, size = 5, area = '', subject = '' } = req.query


    // 1. 分页原理
    // let page = 1 //如果未传递，则默认第1页
    // let size = 3 //取5条
    // 如果未传递，则默认第1页  取5条
    // 判断输入的是否是整数
    page = page + ''
    if (page.indexOf('.') != -1) {
        // res.send('请传递一个正确的页码')
        next({
            msg: '请传递一个正确的页码',
            status: 500
        })
        return
    }
    page = Number(page) //再转成数字类型
    size = size + ''
    if (size.indexOf('.') != -1) {
        // res.send('请传递一个正确的页码')
        next({
            msg: '请传递一个正确的数字',
            status: 500
        })
        return
    }
    size = Number(size) //再转成数字类型
    let startIndex = (page - 1) * size //从第几条开始

    //2. 处理筛选条件
    let whereStr = '' //存放筛选条件的变量字符串。
    // 如果为空，则没有条件，则不为空则已经有条件了。后续应该用AND 拼接
    // let area = '北京' //从前台传递过来的参数（用户点了地区模块的某个城市）
    // let subject = '语文'
    /*
        WHERE area_name='北京' AND subject_name='语文'
        whereStr这个变量有3种情况：
            1、空字符串
            2、有条件且只有一个，那么不需要AND
            3、有条件且是两个及以上的条件则用AND 连接
    */
    if (area != '') {
        if (whereStr == '') { //还没有条件，可以用WHERE
            whereStr += ` WHERE area_name='${area}' `//保证前后都有空格
        } else {
            whereStr += ` AND area_name='${area}' ` //保证前后都有空格
        }
    }


    if (subject != '') {
        if (whereStr == '') { //还没有条件，可以用WHERE
            whereStr += ` WHERE subject_name='${subject}' `//保证前后都有空格
        } else {
            whereStr += ` AND subject_name='${subject}' ` //保证前后都有空格
        }
    }
    let sql1 = `
    SELECT id,cid,type_name, CONCAT('${api_url}/uploads/courses/',image_src) AS image_src,subject_name,title,area_name,price,type FROM e_course ${whereStr} ORDER BY id DESC LIMIT ${startIndex},${size}
    ` //返回具体课程列表的sql

    // res.send( sql1 )
    // return
    let sql2 = ` SELECT * FROM e_course ${whereStr}` //计算总条数、总页码的sql
    /*
        result:{
             "page": 1, //当前页码 已知
              "totalPage": 8, //总页码  ?
               "rows": 36,//总条数   ？
               "data" ？已得出
        }
    */

    //3. 执行sql语句
    let res1 = await Query(sql1) //返回具体课程列表
    let res2 = await Query(sql2) //它是为了计算总条数、总页码

    //4. 根据业务封装返回的data数据
    let rows = res2.result.length
    let totalPage = Math.ceil(rows / size)

    let data = { //要返回前端的json数据
        status: 200,
        msg: "OK",
        result: {
            page,
            rows,
            size,
            totalPage,
            data: res1.result
        }
    }
    res.send(data)
});




//<------------------------------------------------------------------------------->





//列表页分类 查询
router.get('/search', async function (req, res, next) {

    // 0. 接收所有的参数
    let { page = 1, size = 5, keyword = '' } = req.query;


    // 1. 分页原理
    // let page = 1 //如果未传递，则默认第1页
    // let size = 3 //取5条
    // 如果未传递，则默认第1页  取5条
    // 判断输入的是否是整数
    page = page + ''
    if (page.indexOf('.') != -1) {
        // res.send('请传递一个正确的页码')
        next({
            msg: '请传递一个正确的页码',
            status: 500
        })
        return
    }
    page = Number(page) //再转成数字类型
    size = size + ''
    if (size.indexOf('.') != -1) {
        // res.send('请传递一个正确的页码')
        next({
            msg: '请传递一个正确的数字',
            status: 500
        })
        return
    }
    size = Number(size) //再转成数字类型
    let startIndex = (page - 1) * size //从第几条开始


    let sql1 = `
    SELECT id,cid,title,price, CONCAT('${api_url}/uploads/courses/',image_src) AS image_src,intro, CONCAT('${api_url}/uploads/courses/',detail_imgs) AS detail_imgs,type,type_name,area_name,grade_name,subject_name,category_name,tid,status FROM e_course WHERE title LIKE '%${keyword}%' ORDER BY id DESC LIMIT ${startIndex},${size}
    `
    // res.send( sql1 )
    // return
    let sql2 = ` SELECT * FROM e_course WHERE title LIKE '%${keyword}%'` //计算总条数、总页码的sql
    /*
        result:{
             "page": 1, //当前页码 已知
              "totalPage": 8, //总页码  ?
               "rows": 36,//总条数   ？
               "data" ？已得出
        }
    */
    //3. 执行sql语句
    let res1 = await Query(sql1) //返回具体课程列表
    let res2 = await Query(sql2) //它是为了计算总条数、总页码

    //4. 根据业务封装返回的data数据
    let rows = res2.result.length
    let totalPage = Math.ceil(rows / size)

    console.log('hahahh');

    let data = { //要返回前端的json数据
        status: 200,
        msg: "OK",
        result: {
            page,
            totalPage,
            rows,
            keyword,
            data: res1.result
        }
    }
    res.send(data)
});

module.exports = router;
